Micron Document
██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝


🬧 The NomadNet Encyclopedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

🔍 Search

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

OCaml
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwbaOCamlcite-ref-1[1] è un avanzato mwcqlinguaggio di programmazione appartenente alla famiglia di linguaggi di programmazione mwcgML. È sviluppato e distribuito come mwcwsoftware mwdaopen source dalla mwdqINRIA. O'Caml è stato creato nel mwdg1996 come successore del mwdwCAML. Tra i suoi autori si ricordano Xavier Leroy, Jerome Vouillon e Damien Doligez.

La sigla mweqCAML originariamente derivava da mwegCategorical Abstract Machine Language, mentre la mwewO iniziale è stata aggiunta per sottolineare l'estensione ad oggetti del nuovo linguaggio.

O'Caml condivide le caratteristiche dei linguaggi mwfqfunzionali e di quelli mwfgimperativi, ma contiene elementi di mwfwprogrammazione orientata agli oggetti e alcune differenze sintattiche.

Contents

Uso
Note

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Caratteristiche

OCaml si distingue dagli altri linguaggi della famiglia ML per le prestazioni. Il sistema di mwgwmwharuntime è stato progettato per essere veloce, efficiente ed avere poche richieste di memoria. O'Caml fornisce un mwhqcompilatore in mwhgmwhwbytecode, un interprete a riga di comando e un compilatore di mwiacodice nativo ottimizzato. Il codice generato dal compilatore nativo è tipicamente paragonabile al mwiqC/C++ nell'efficienza algoritmica.cite-ref-2[2]

Caratteristiche molto potenti del linguaggio sono un sistema di tipi statico, la deduzione del tipo delle variabili, il mwkapolimorfismo parametrico, la mwkqmwkgtail recursion, il mwkwmwlapattern matching, le mwlqfirst class lexical closures, l'uso dei functors (parametric modules), la mwmagestione delle eccezioni, e un mwmqgarbage collection incrementale. È anche molto conciso nella sintassi. Il sistema ad oggetti fornisce mwmgereditarietà multipla, costruzione diretta di oggetti (specificando i metodi che sono unici per quell'oggetto) o da mwmwclassi, e structural subtyping (oggetti sono di tipo compatibile se i loro metodi sono compatibili, a prescindere da cosa siano derivati).

Le caratteristiche di OCaml sono bilanciate tra l'espressività e le nuove caratteristiche da una parte e la facilità di interfacciamento con sistemi e librerie preesistenti dall'altra. OCaml contiene il supporto per funzioni comuni ad altri linguaggi, come mwngprintf e per interfacce esterne che permettono un facile mwnwlinking con primitive C, incluso il supporto per la gestione efficiente di array di numeri in un formato compatibile sia con il mwoaC/C++ che con il mwoqFortran.

Il software fornito a corredo di OCaml prevede un potente mwowpreprocessore (che permette estensioni sintattiche), un mwpadebugger (che permette l'analisi a ritroso degli errori), un generatore di documentazione, un mwpqprofiler e altre numerose librerie di uso comune. Il compilatore è disponibile per un numero di piattaforme elevato, incluso mwpwUnix, mwqaWindows e mwqqMacintosh, con la possibilità di generare codice nativo per tutte le principali architetture (mwqgIA-32, mwqwPowerPC, mwraAMD64, mwrqSPARC, mwrgIA-64, mwrwAlpha, mwsaHP-PA, mwsqMIPS, mwsgStrongARM), fornendo così una buona mwswportabilità.

Uso

OCaml è usato in un gran numero di applicazioni, che includono sistemi per provare teoremi e per analizzare programmi. È usato anche in applicazioni come mwtgMLDonkey (un popolare programma mwtwP2P che supporta numerosi protocolli) e Unison File Synchronizer.cite-ref-3[3]

Programmi scritti in OCaml hanno vinto ripetutamente il ICFP programming contest.

Esempi di codice

Hello, world!

Il seguente esempio stampa il testo "mwwqHello world".

let main () =
print_endline "Hello World";;

il codice può essere compilato in un codice di tipo bytecode eseguibile:

$ ocamlc hello.ml -o hello

o compilato in un codice ottimizzato per l'architettura in uso:

$ ocamlopt hello.ml -o hello

il tutto può essere eseguito tramite:

$ ./hello

Somma di una lista di interi

Le liste sono uno dei tipi fondamentali in OCaml, il seguente codice spiega come eseguire la somma in maniera ricorsiva di una lista di interi. La funzione mwbasum scorre sequenzialmente tutti gli elementi della lista data in input col parametro mwbqlst, ne restituisce la somma sotto forma di intero.

let rec sum = function
| [] -> 0
| x::xs -> x + sum xs;;

# sum [1;2;3;4;5];;
- : int = 15

Fattoriale

let rec fact = function
| 0 -> 1
| n -> n * fact (n - 1);;

99 bottiglie di birra

open Printf
let bottiglie = function
| 0 -> "non c'e' nessuna bottiglia di birra"
| 1 -> "c'e' una bottiglia di birra"
| n -> sprintf "ci sono %d bottiglie di birra" n
let verso n =
let corrente = bottiglie n and prossimo = bottiglie (n - 1) in
let primaLinea = sprintf "%s sulla parete, %s.\n" corrente corrente in
let secondaLinea = "Prendine una, passala in giro,\n" in
let terzaLinea = sprintf "e %s sulla parete!\n" prossimo in
primaLinea ^ secondaLinea ^ terzaLinea
let cantaCanzone () =
for n = 99 downto 1 do
print_endline (verso n)
done;;
cantaCanzone()

Note

cite-note-11. Un tempo chiamato mwaqeObjective Caml e conosciuto anche come mwaqiO'Caml, ma rinominato nel 2011 (cfr. mwaqmhttps://ocaml.org/learn/history.html/#ObjectiveCaml mwaqqArchiviatomwaqu il 5 aprile 2019 in mwaqyInternet Archivemwaqc.).
cite-note-22. Prestazioni comparate di linguaggi di programmazione, tra cui OCaml, su diversi esempi: mwaqwThe Computer Language Shootout Benchmarks mwaq0Archiviatomwaq4 il 31 agosto 2012 in mwaq8Internet Archivemwara..
cite-note-33. mwarumwarymwarcPagina di Unison File Synchronizer, su mwargcis.upenn.edu.

Voci correlate

• mwarwStandard ML

Altri progetti

Altri progetti

• Wikimedia Commons

• Wikimedia Commons contiene immagini o altri file su OCaml

Collegamenti esterni

• (EN) Sito ufficiale, su ocaml.org.
• citerefopen-library(EN) Opere riguardanti OCaml, su Open Library, Internet Archive.
• OCaml, su packages.debian.org.
• mwasm(EN) Pagina ufficiale della famiglia di linguaggi Caml, su caml.inria.fr.
• mwasu(FR) Pagina ufficiale della famiglia di linguaggi Caml, su caml.inria.fr.
• mwasc(EN, FR) Provalo nel tuo browser, su try.ocamlpro.com.
• mwask(EN) Confronto di prestazioni tra diversi linguaggi, su shootout.alioth.debian.org. URL consultato il 5 febbraio 2005 (archiviato dall'url originale il 27 giugno 2009).
• mwass(EN) Unison File Synchronizer, su cis.upenn.edu.
• mwas0(EN) Developing applications with Objective CAML, su caml.inria.fr. URL consultato il 5 febbraio 2005 (archiviato dall'url originale il 6 febbraio 2005).
• mwas8(EN) Interfaccia GTK+, su wwwfun.kurims.kyoto-u.ac.jp.